﻿using System;
using System.Collections.Generic;
using Acaweb.Data.Contracts;
using Acaweb.Model.Entities.Reports;
using Acaweb.Model.Entities.DatosCompuestos;
using System.Collections;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Linq;
using System.IO;

namespace Acaweb.Data.Dao.NHibernate
{
    public class ReporteDao : HibernateDao<ReportePDF, int>, IReporteDao
    {

        public string GenerateVolantePago(TipoDocumentoVolante TipoDocumento, int CodigoEstudiante, PeriodoAcademico Periodo)
        {
            string Query = ResourceSql.VolantePago2;
            string QueryDescripcion = ResourceSql.VolantePagoDescripcion2;

            //CodigoEstudiante = 1064898;
            //TipoDocumento = TipoDocumentoVolante.FDG;

            Query = string.Format(Query, "", "", "", TipoDocumento.ToString(), CodigoEstudiante.ToString(), Periodo.ToLongFormat());

            QueryDescripcion = string.Format(QueryDescripcion, TipoDocumento.ToString(), Periodo.ToLongFormat(), CodigoEstudiante.ToString());

            IList<ReportePDF> Lista = Session.CreateSQLQuery(Query).SetResultTransformer(new global::NHibernate.Transform.AliasToBeanResultTransformer(typeof(ReportePDF))).List<ReportePDF>();
            Lista[0].Copiar(Session.CreateSQLQuery(QueryDescripcion).SetResultTransformer(new global::NHibernate.Transform.AliasToBeanResultTransformer(typeof(ReportePDF))).List<ReportePDF>().First());

            ReportDocument Rpt =  new rptvmatricula(); //new ReportDocument();
            //Rpt.Load(@"D:\www\UsbctgApi\lib\rptvmatricula.rpt");
            Rpt.Database.Tables[0].SetDataSource(Lista.ToArray());

            Rpt.Subreports[0].Database.Tables[0].SetDataSource(Lista.ToArray());
            Rpt.Subreports[1].Database.Tables[0].SetDataSource(Lista.ToArray());

            string Dir = @"Resource\Documents/" + Guid.NewGuid().ToString() + ".pdf";
            string Direccion = @"D:\www\UsbctgApi\Acaweb.Services\" + Dir;

            Rpt.ExportToDisk(ExportFormatType.PortableDocFormat, Direccion);

            return Dir;
        }


        public string GenerateVolanteInscripcion(PeriodoAcademico PeriodoAcademico, long NumeroIdentificacion)
        {
            string Query = ResourceSql.VolanteInscripcion;

            Query = string.Format(Query, PeriodoAcademico.Ano, PeriodoAcademico.Periodo, NumeroIdentificacion);

            IList<ReporteInscripcion> Lista = Session.CreateSQLQuery(Query).SetResultTransformer(new global::NHibernate.Transform.AliasToBeanResultTransformer(typeof(ReporteInscripcion))).List<ReporteInscripcion>();

            ReportDocument Rpt = new rptPagoInscripcion(); //ReportDocument();
            //Rpt.Load(@"D:\www\UsbctgApi\lib\rptPagoInscripcion.rpt");
            Rpt.Database.Tables[0].SetDataSource(Lista.ToArray());

            string Dir = @"Resource\Documents/" + Guid.NewGuid().ToString() + ".pdf";
            string Direccion = @"D:\www\UsbctgApi\Acaweb.Services\" + Dir;
            Rpt.ExportToDisk(ExportFormatType.PortableDocFormat, Direccion);

            return Dir;
        }
    }
}